使用平移操纵器可以使用户在 Kanzi 应用程序中移动节点。例如,您可以使用平移操纵器让用户移动图形。请参阅为节点启用平移手势。
使用 平移操纵器 (Pan Manipulator) 触发器响应平移手势。例如,您可以设置用户平移节点时的节点外观。请参阅使用平移操纵器 (Pan Manipulator) 触发器。
平移操纵器是一种输入操纵器,您可以用于在 Kanzi 应用程序中添加手势识别到节点上。 您可以通过 Kanzi Engine API 分配输入操纵器。请参阅使用输入操纵器。
通过完成教程学习如何使用平移操纵器。请参阅教程:平移、缩放、轻敲。
要为节点启用平移手势:
#
符号后跟别名名称访问别名目标节点。private: // 为PanManipulator::StartedMessage
消息定义处理程序,该消息来自 //具有可生成平移消息的输入操纵器的 2D 节点。 //此处理程序可为平移手势准备 2D 节点。 void onPanStarted(PanManipulator::StartedMessageArguments& messageArguments) { //从消息参数获得用户平移的节点。 Node2DSharedPtr node2d = dynamic_pointer_cast<Node2D>(messageArguments.getSource()); if (!node2d) { return; } //当开始节点上的平移手势,让节点位于前面。 node2d->moveToFront(); } //为PanManipulator::MovedMessage
消息定义处理程序,该消息来自 //具有可生成平移消息的输入操纵器的 2D 节点。 //此处理程序按平移手势的量变换 2D 节点。 void onPanMoved(PanManipulator::MovedMessageArguments& messageArguments) { //从消息参数获得用户平移的节点。 Node2DSharedPtr node2d = dynamic_pointer_cast<Node2D>(messageArguments.getSource()); if (!node2d) { return; } //获得自平移手势序列中上一条消息以来 //平移的像素距离。 Vector2 translationDelta = messageArguments.getDelta(); //获得节点的渲染变换 (Render Transformation) 属性。 SRTValue2D nodeTransform = node2d->getRenderTransformation(); //获得节点的大小。 Vector2 nodeSize = node2d->getActualSize(); //获得节点的当前变换。 Vector2 translation = nodeTransform.getTranslation(); //从平移消息应用变换。 Vector2 translationTarget = translation - translationDelta; //设置新变换。 nodeTransform.setTranslation(translationTarget); //应用新变换到节点。 node2d->setRenderTransformation(nodeTransform); }
onProjectLoaded()
函数中创建 PanManipulator
操纵器并订阅其消息。virtual void onProjectLoaded() KZ_OVERRIDE { ScreenSharedPtr screen = getScreen(); Domain* domain = getDomain(); //使用别名获取PanNode。 NodeSharedPtr panNode = screen->lookupNode<Node>("#PanNode"); //创建生成平移消息的输入操纵器。 PanManipulatorSharedPtr panManipulator = PanManipulator::create(domain); //设置水平和垂直轴的阈值(以像素为单位), //在输入操纵器识别平移手势之前,手指或鼠标需要移动轴。 panManipulator->setRecognitionThreshold(Vector2(10.0f, 10.0f)); //添加输入操纵器到PanNode。 panNode->addInputManipulator(panManipulator); //订阅PanNode 的PanManipulator::StartedMessage
消息。 //PanManipulator
在用户点击或触摸附加节点时生成此消息。 panNode->addMessageHandler(PanManipulator::StartedMessage, bind(&MyProject::onPanStarted, this, placeholders::_1)); //订阅 PanNode 的PanManipulator::MovedMessage
消息。 //当用户在水平或垂直轴上移动手指或鼠标超过识别阈值时,PanManipulator
//首次生成此消息,然后 //当手指或鼠标在更新之间移动时生成此消息。 panNode->addMessageHandler(PanManipulator::MovedMessage, bind(&MyProject::onPanMoved, this, placeholders::_1)); }
使用 平移操纵器 (Pan Manipulator) 触发器响应平移手势。例如,您可以设置用户平移节点时的节点外观。
平移操纵器 (Pan Manipulator) 有这些触发器:
要使用平移操纵器 (Pan Manipulator) 触发器:
有关详细信息,请参阅 API reference中的 PanManipulator
类。